#! /bin/bash

#############################
#Sistemas Operativos
#Modulo Instalador
#Nombre: Instalar_TP.sh
#Autor: Grupo 04
#############################

#####################################
# Definicion variables y constantes #
#####################################

cabecera="TP SO7508 Segundo Cuatrimestre 2013. Tema B Copyright © Grupo 04"
GRUPO=`pwd`
CONFDIR="$GRUPO/conf"
ARCHCONF="$CONFDIR/Instalar_TP.conf"
BINDIR="$GRUPO/bin"
MAEDIR="$GRUPO/mae"
ARRIDIR="$GRUPO/arribos"
DATASIZE=100
ACEPDIR="$GRUPO/aceptados"
RECHDIR="$GRUPO/rechazados"
REPODIR="$GRUPO/listados"
PROCDIR="$GRUPO/procesados"
LOGDIR="$GRUPO/log"
LOGEXT="log"
LOGSIZE=409600 # 400 Kbytes

rutaInst="$CONFDIR/Instalar_TP.conf"
export CONFDIR="$GRUPO/conf"
###########################
# Definicion de funciones #
###########################


#------------------------------------------------------------------------------------------------#
# Graba mensajes en el archivo de log Instalar_TP.log y también los imprime por pantalla.
# El primer parametro es el tipo de msj que se pasa a la funcion que loguea
# Opciones: por default graba en archivo e imprime por pantalla.
#           -L: solo graba en archivo
#           -P: solo imprime por pantalla
#------------------------------------------------------------------------------------------------#

function log () {
	TIP_ERR="$1"
	if [ $# -eq 2 ]
	then
		./ejecutables/Grabar_L.sh "INSTALAR_TP" "$TIP_ERR" "$2"
		echo $2
	elif [ $# -eq 3 ]
	then
		if [ $2 == "-L" ]
		then
			./ejecutables/Grabar_L.sh "INSTALAR_TP" "$TIP_ERR" "$3"
			elif [ $2 == "-P" ]	
			then
				echo $3
			else
				echo "log: Parámetro $3 no reconocido."
			fi
	else
		echo "log: La cantidad de parámetros es incorrecta."
	fi	
}


#------------------------------------------------------------------------------------------------#
# Verifica cual es el problema de la instalación y lo soluciona.
#------------------------------------------------------------------------------------------------#

function rev_ins() {
	log "I" "Se está revisando la instalación para solucionar problemas."
	echo ''
	
	log "I" "Checkeando el directorio de ejecutables y los comandos."
	BINDIR_LOC=`grep '^BINDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^BINDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $BINDIR_LOC ]
	then
		log "E" "El directorio BINDIR no existe, por lo cual hay que definirlo."
		def_bindir
		mkdir -p $BINDIR ; log "I" "$BINDIR"
		mov_eje
	else
		log "I" "El directorio de ejecutables está correctamente configurado."
		log "I" "Revisando la correcta instalación de los comandos."
		
		if [ ! -f $BINDIR_LOC/Recibir_B.sh ]
		then
			log "E" "El comando Recibir_B_sh no está instalado correctamente."
			log "I" "Reinstalando el comando Recibir_B.sh"
			mov_eje
		else
			log "I" "El comando Recibir_B.sh esta correctamente instalado."
		fi
		
		if [ ! -f $BINDIR_LOC/Reservar_B.sh ]
		then
			log "E" "El comando Reservar_B_sh no está instalado correctamente."
			log "I" "Reinstalando el comando Reservar_B.sh"
			mov_eje
		else
			log "I" "El comando Reservar_B.sh esta correctamente instalado."
		fi
		
		if [ ! -f $BINDIR_LOC/Imprimir_B.pl ]
		then
			log "E" "El comando Imprimir_B.pl no está instalado correctamente."
			log "I" "Reinstalando el comando Imprimir_B.pl"
			mov_eje
		else
			log "I" "El comando Imprimir_B.sh esta correctamente instalado."
		fi
		
		if [ ! -f $BINDIR_LOC/Mover_B.sh ]
		then
			log "E" "El comando Mover_B.sh no está instalado correctamente."
			log "I" "Reinstalando el comando Mover_B.sh"
			mov_eje
		else
			log "I" "El comando Mover_B.sh esta correctamente instalado."
		fi
		
		if [ ! -f $BINDIR_LOC/Grabar_L.sh ]
		then
			log "E" "El comando Grabar_L.sh no está instalado correctamente."
			log "I" "Reinstalando el comando Grabar_L.sh"
			mov_eje
		else
			log "E" "El comando Grabar_L.sh esta correctamente instalado."
		fi
		
		if [ ! -f $BINDIR_LOC/Start_D.sh ]
		then
			log "E" "El comando Start_D.sh no está instalado correctamente."
			log "I" "Reinstalando el comando Start_D.sh"
			mov_eje
		else
			log "I" "El comando Start_D.sh esta correctamente instalado."
		fi

		if [ ! -f $BINDIR_LOC/Stop_D.sh ]
		then
			log "E" "El comando Stop_D.sh no está instalado correctamente."
			log "I" "Reinstalando el comando Stop_D.sh"
			mov_eje
		else
			log "I" "El comando Stop_D.sh esta correctamente instalado."
		fi
	fi

	log "I" "Checkeando el directorio de archivos maestros."
	MAEDIR_LOC=`grep '^MAEDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^MAEDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $MAEDIR_LOC ]
	then
		log "E" "El directorio MAEDIR no existe, por lo cual hay que definirlo."
		def_maedir
		mkdir -p $MAEDIR ; log "I" "$MAEDIR"
		mov_mae
	else
		log "I" "El directorio MAEDIR está correctamente configurado."
		log "I" "Verificando la existencia de los archivos maestros."
		
		if [ ! -f $MAEDIR_LOC/salas.mae ]
		then
			log "E" "El archivo maestro salas.mae no está instalado correctamente."
			log "I" "Reinstalando el archivo maestro salas.mae"
			mov_mae
		else
			log "I" "El archivo maestro 'salas.mae' es correcto."
		fi
		
		if [ ! -f $MAEDIR_LOC/obras.mae ]
		then
			log "E" "El archivo maestro obras.mae no está instalado correctamente."
			log "I" "Reinstalando el archivo maestro obras.mae"
			mov_mae
		else
			log "I" "El archivo maestro 'obras.mae' es correcto."
		fi
	fi

	log "I" "Checkeando el directorio de arribos."
	ARRIDIR_LOC=`grep '^ARRIDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ARRIDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $ARRIDIR_LOC ]
	then
		log "E" "El directorio ARRIDIR no existe, por lo cual hay que definirlo."
		def_arridir
		mkdir -p $ARRIDIR ; log "I" "$ARRIDIR"
	else
		log "I" "El directorio de arribos está correctamente configurado."
	fi

	log "I" "Checkeando el directorio de archivos aceptados."
	ACEPDIR_LOC=`grep '^ACEPDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ACEPDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $ACEPDIR_LOC ]
	then
		log "E" "El directorio ACEPDIR no existe, por lo cual hay que definirlo."
		def_acepdir
		mkdir -p $ACEPDIR ; log "I" "$ACEPDIR"
	else
		log "I" "El directorio de archivos aceptados está correctamente configurado."
	fi

	log "I" "Checkeando el directorio de archivos rechazados."
	RECHDIR_LOC=`grep '^RECHDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^RECHDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $RECHDIR_LOC ]
	then
		log "E" "El directorio RECHDIR no existe, por lo cual hay que definirlo."
		def_rechdir
		mkdir -p $RECHDIR ; log "I" "$RECHDIR"
	else
		log "I" "El directorio de archivos rechazados está correctamente configurado."
	fi

	log "I" "Checkeando el directorio de reportes."
	REPODIR_LOC=`grep '^REPODIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^REPODIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $REPODIR_LOC ]
	then
		log "E" "El directorio REPODIR no existe, por lo cual hay que definirlo."
		def_repodir
		mkdir -p $REPODIR ; log "I" "$REPODIR"
	else
		log "I" "El directorio de reportes está correctamente configurado."
	fi

	log "I" "Checkeando el directorio de archivos procesados."
	PROCDIR_LOC=`grep '^PROCDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^PROCDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $PROCDIR_LOC ]
	then
		log "E" "El directorio PROCDIR no existe, por lo cual hay que definirlo."
		def_procdir
		mkdir -p $PROCDIR ; log "I" "$PROCDIR"
		mov_disp
	else
		log "I" "El directorio de archivos procesados está correctamente configurado."
		log "I" "Verificando la existencia del archivo de disponibilidad."

		if [ ! -f $PROCDIR_LOC/combos.dis ]
		then
			log "E" "El archivo de disponibilidad combos.dis no está instalado correctamente."
			log "I" "Reinstalando el archivo de disponibilidad combos.dis"
			mov_disp
		else
			log "I" "El archivo de disponibilidad 'combos.dis' es correcto."
		fi
	fi

	log "I" "Checkeando el directorio de logs."
	LOGDIR_LOC=`grep '^LOGDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ ! -d $LOGDIR_LOC ]
	then
		log "E" "El directorio LOGDIR no existe, por lo cual hay que definirlo."
		def_logdir
		mkdir -p $LOGDIR ; log "I" "$LOGDIR"
	else
		log "I" "El directorio de archivos de log está correctamente configurado."
	fi

	log "I" "Checkeando la extensión de los archivos de log."
	LOGEXT_LOC=`grep '^LOGEXT=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGEXT=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$LOGEXT_LOC" ]
	then
		log "E" "La extension de lo archivos de LOG no está definida, por lo cual hay que definirla."
		def_logext
	else
		log "I" "La extensión para los archivos de log está correctamente configurada."
	fi

	log "I" "Checkeando el tamaño máximo de los archivos de log."
	LOGSIZE_LOC=`grep '^LOGSIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGSIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$LOGSIZE_LOC" ]
	then
		log "E" "El tamaño máximo de lo archivos de LOG no está definida, por lo cual hay que definirla."
		def_logsize
	else
		log "I" "El tamaño máximo de los archivos de log está correctamente configurado."
	fi

	log "I" "Checkeando el espacio libre mínimo para arribos."
	DATASIZE_LOC=`grep '^DATASIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^DATASIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	if [ -z "$DATASIZE_LOC" ]
	then
		log "E" "El espacio libre mínimo para los arribos no está definida, por lo cual hay que definirla."
		def_datasize
	else
		log "I" "El espacio libre mínimo para arribos está correctamente configurado."
	fi

}

#------------------------------------------------------------------------------------------------#
# Levanta los cambios hechos a los valores por default en en archivo de configuración.
#------------------------------------------------------------------------------------------------#

function car_var() {
	BINDIR=`grep '^BINDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^BINDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	MAEDIR=`grep '^MAEDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^MAEDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	ARRIDIR=`grep '^ARRIDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ARRIDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	ACEPDIR=`grep '^ACEPDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^ACEPDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	RECHDIR=`grep '^RECHDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^RECHDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	REPODIR=`grep '^REPODIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^REPODIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	PROCDIR=`grep '^PROCDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^PROCDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	LOGDIR=`grep '^LOGDIR=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGDIR=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	LOGEXT=`grep '^LOGEXT=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGEXT=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	LOGSIZE=`grep '^LOGSIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^LOGSIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
	DATASIZE=`grep '^DATASIZE=[^=]*=[^=]*=[^=]*$' $ARCHCONF | sed 's/^DATASIZE=\([^=]*\)=[^=]*=[^=]*$/\1/'`
}

#------------------------------------------------------------------------------------------------#

validar_dir () {
	#Si el directorio pasado por parametro no es absoluto lo hace absoluto, dentro de $GRUPO
	#Si comienza en . lo hace absoluto dentro de $GRUPO
	#Si el directorio no esta dentro del directorio de trabajo devuelve null
	retorno=""
	
	if [ `expr match "$1" './'` == 2 ]
	then
		# ./ esta al principio, es relativo
		retorno=${1/"."/$GRUPO}
	else
		if [ `expr match "$1" '/'` != 1 -a "$1" != "" ]
		then
			# no empieza ni con . ni con /
			retorno="${GRUPO}/${1}"
		else
			if [ "`echo $1 | grep -o '.*grupo04'`" == "$GRUPO" ]
			then
				#Es path absoluto y esta dentro de $GRUPO
				retorno=$1
			fi
		fi
	fi
	
	echo $retorno
}

#Definir directorio de instalacion de los ejecutables
def_bindir () {
	msj="Defina el directorio de instalación de los ejecutables ($BINDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc
	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then 
			BINDIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"			
		fi
	fi

	log "I" "BINDIR es $BINDIR"
	echo ""
}

#Definir directorio de instalacion de los archivos maestros
def_maedir(){
	msj="Defina el directorio de instalación de los archivos maestros $MAEDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc
	
	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then 
			MAEDIR=$dir_validado
		else
			"Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "MAEDIR es $MAEDIR"
	echo ""
}


def_arridir(){
	msj="Defina el directorio de arribo de los archivos externos ($ARRIDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			ARRIDIR=$dir_validado
		else
			log "I" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "ARRIDIR es $ARRIDIR"
	echo ""
}

validar_valor_numerico () {
	#Valida que el valor pasado por parametro sea numerico y mayor a cero
	#Devuelve 1 si es valido, 0 en caso contrario
	retorno=0
	numerico=0
	numerico=`echo $1 | grep -c "[A-Z|a-z|-]"`
	len=`expr length "$1"`
	
	#El valor 15 me permite multiplicar por 1024 y que no se vaya de rango
	if [ $numerico -eq 0 -a $len -le 15 ] 
	then 
		cero=0
		cero=`echo $1 | grep -c "[1-9]"`
		if [ $cero -gt 0 ]
		then retorno=1
		fi
	fi
	
	return $retorno
}

#Definir el espacio minimo libre para el arribo de archivos externos
def_datasize(){

	espacio_ok=0
	DATASIZE_TEST=${DATASIZE}

	#Se guarda el resultado de hacer df -P $GRUPO en un array y luego se toma el tamaño disponible
	read -d '' -ra df_retorno < <(LC_ALL=C df -Pm "$GRUPO")
	espacio_disponible=${df_retorno[10]}


	while [ $espacio_ok != 1 ]
	do
		mensaje="Defina el espacio mínimo libre para el arribo de archivos externos en Mbytes ($DATASIZE): "
		log "I" "-L" "$mensaje"
		read -p "$mensaje" opc

		#Valido que sea numerico y distinto de cero
		validar_valor_numerico $opc

		if [ $? -eq 1 ]
		then 
			DATASIZE_TEST=${opc}
		else
			if [ "$opc" != "" ]
			then 
				log "W" "Valor invalido. Usando valor por defecto"
				DATASIZE_TEST=${DATASIZE}
			fi
		fi

		#Se guarda el resultado de hacer df -P $GRUPO en un array y luego se toma el tamaño disponible
		read -d '' -ra df_retorno < <(LC_ALL=C df -Pm "$GRUPO")
		espacio_disponible=${df_retorno[10]}
				
		if [ ${DATASIZE_TEST} -ge $espacio_disponible ]
		then
			#espacio_disponible_mb=$((${espacio_disponible}/1024)) #traspaso a Mb para mostrar
			log "SE" "Insuficiente espacio en disco."
			log "SE" "Espacio disponible: $espacio_disponible Mb."
			log "SE" "Espacio requerido ${DATASIZE_TEST} Mb"
			log "SE" "Cancele la instalación e inténtelo mas tarde o vuelva a intentarlo con otro valor."
			espacio_ok=0
			read -n 1 -p "Desea intentarlo nuevamente? (S/N): " opc
			if [ $opc = 'n' -o $opc = 'N' ]
			then 				
				log "I" "-L" "Instalacion abortada por el usuario"
				$opcion = "N"
#				exit 0
			else
			echo ""
			fi
		else
			espacio_ok=1
		fi
	done
	
	DATASIZE=$DATASIZE_TEST
	log "I" "DATASIZE es $DATASIZE Mb"
	echo ""
}


#Definir directorio de grabacion de los archivos aceptados
def_acepdir(){
	msj="Defina el directorio de grabación de los archivos externos aceptados ($ACEPDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			ACEPDIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "ACEPDIR es $ACEPDIR"
	echo ""
}

#Definir directorio de grabacion de los archivos externos rechazados
def_rechdir(){
	msj="Defina el directorio de grabación de los archivos externos rechazados ($RECHDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			RECHDIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "RECHDIR es $RECHDIR"
	echo ""
}

#Definir directorio de grabacion de los listados de salida
def_repodir(){
	msj="Defina el directorio de grabación de los listados de salida ($REPODIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			REPODIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "REPODIR es $REPODIR"
	echo ""
}

#Definir directorio de trabajo principal del proceso Reservar_B
def_procdir(){
	msj="Defina el directorio de grabación de los archivos procesados ($PROCDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			PROCDIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "PROCDIR es $PROCDIR"
	echo ""
}

#Definir directorio de logs para los comandos
def_logdir(){
	msj="Defina el directorio de logs ($LOGDIR): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		dir_validado=`validar_dir $opc`
		if [ "$dir_validado" != "" ]
		then
			LOGDIR=$dir_validado
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "LOGDIR es $LOGDIR"
	echo ""
}

#Definir extension del archivo de log
def_logext(){
	msj="Ingrese la extensión para los archivos de log ($LOGEXT): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	if [ "$opc" != "" ]
	then
		#Usar eleccion de usuario si es valida
		if [ "$opc" != "" ]
		then
			LOGEXT=$opc
		else
			log "W" "Entrada invalida, utilizando valor por defecto"
		fi
	fi

	log "I" "LOGEXT es $LOGEXT"
	echo ""
}

def_logsize(){
	msj="Defina el tamaño máximo para los archivos $LOGEXT en Kbytes: $((${LOGSIZE}/1024))): "
	log "I" "-L" "$msj"
	read -p "$msj" opc

	validar_valor_numerico $opc
	
	if [ $? -eq 1 ]
	then
		#Usar eleccion de usuario si es valida
		LOGSIZE=$((${opc}*1024))
	else
		if [ "$opc" != "" ]
		then 
			"W" log "Entrada invalida, utilizando valor por defecto"
		fi
	fi
	log "I" "LOGSIZE es $((${LOGSIZE}/1024)) Kb"
	echo ""
}

#Mostrar estructura de directorios resultante y valores de parámetros configurados
instal_lista() {
	clear
	log "I" "-------------------------------------------------------------------------------------"
	log "I" "$cabecera"
	log "I" "Librería del Sistema: $CONFDIR"
	if [ $# -eq 1 ]
		then	ls "$CONFDIR"
	fi
	log "I" "Ejecutables: $BINDIR"
	if [ $# -eq 1 ]	
		then	ls "$BINDIR"
	fi
	log "I" "Archivos maestros: $MAEDIR"
	if [ $# -eq 1 ]	
		then ls "$MAEDIR"
	fi
	log "I" "Directorio de arribo de archivos externos: $ARRIDIR"
	if [ $# -eq 1 ]		
		then ls "$ARRIDIR"
	fi
	log "I" "Espacio mínimo libre para arribos: $DATASIZE Mb"
	log "I" "Archivos externos aceptados: $ACEPDIR"
	log "I" "Archivos externos rechazados: $RECHDIR"
	log "I" "Reportes de salida: $REPODIR"
	log "I" "Archivos procesados: $PROCDIR"
	log "I" "Logs de auditoria del Sistema: $LOGDIR/<comando>$LOGEXT"
	log "I" "Tamaño máximo para los archivos de log del sistema: $((${LOGSIZE}/1024)) Kb"
	log "I" "Estado de la instalacion: LISTA"
	log "I" "-------------------------------------------------------------------------------------"
}


#Inicia la instalacion
ini_inst(){
	clear
	read -n 1 -p 'Esta a punto de instalar "Reservas teatrales (Grupo 04)", desea continuar? (S/N): ' opcion
	if [ "$opcion" != "" ]
	then
		#Confirmo la instalacion
		while [ $opcion != 's' -a $opcion != 'S' -a $opcion != 'n' -a $opcion != 'N'  ]
		do
			clear
			read -n 1 -p 'Esta a punto de instalar "Reservas teatrales (Grupo 04)", desea continuar? (S/N): ' opcion
		done
	else 	
		ini_inst	
	fi
}


#Confirma los paremetros de instalacion
conf_parm(){
	opc="r"
	while [ $opc != 's' -a $opc != 'S' -a $opc != 'n' -a $opc != 'N' ]
	do
		instal_lista
		read -p "Acepta? (S/N) " opc
		if [ "$opc" == "" ]
		then 
			opc="r"
		fi
		if [ "$opc" == "n" -o "$opc" == "N" ]
		then		
			set_parm
			opc="r"	
		fi
	done
}

#Acepta la instalacion
acept_inst(){
	opcion='r'		
	while [ $opcion != 's' -a $opcion != 'S' -a $opcion != 'n' -a $opcion != 'N'  ]
	do
		echo $cabecera
		echo 'ATENCION: Al instalar TP SO7508 Segundo Cuatrimestre 2013, Ud. expresa aceptar los'
		echo 'términos y condiciones del "ACUERDO DE LICENCIA DE SOFTWARE" incluido en este paquete'
		read -n 1 -p 'Acepta? (S/N)  ' opcion
		clear
		done
	if [ "$opcion" == "" ]
	then	
		clear
		acept_inst
	fi
}

#Parametros de instalacion
parm_inst(){
	if [ ! -d ./conf ]
	then 
		mkdir ./conf ;
	fi
	echo ''	
	echo ''	
	log "I" "Log del comando Instalar_TP: $CONFDIR/Instalar_TP.log"
	log "I" "Directorio de configuración: $CONFDIR"
	echo ''
}

#Cancela instalacion
canc_inst(){
	if [ $opcion == 'n' -o $opcion == 'N' ]
	then
		echo ''
		log "I" "La instalación fue cancelada. "
	fi
}


#Chequea si Perl esta instalado
chec_perl(){
	if perl < /dev/null > /dev/null 2>&1; 
	then
#		perl=`perl -v | grep version.*$` 
		echo ""
		perl=`perl -version` 								
		log "I" "Perl Version: $perl"
	else
		log "I" "Para instalar el TP es neceario contar con Perl 5 o superior instalado"
		log "I" "Efectúe la instalación e inténtelo nuevamente."
		opcion='N'
	fi
	echo ""
}

#Setear parametros de instalacion
set_parm(){
	#Definir directorio de instalacion de los ejecutables
	def_bindir
	#Definir directorio de instalacion de los archivos maestros
	def_maedir
	#Definir directorio de arribo de archivos externos
	def_arridir
	#Definir el espacio minimo libre para el arribo de archivos externos
	def_datasize
	#Definir directorio de grabacion de los archivos externos aceptados
	def_acepdir
	#Definir directorio de grabacion de los archivos externos rechazados
	def_rechdir
	#Definir directorio de grabacion de los listados de salida
	def_repodir
	#Definir directorio de trabajo principal del proceso Reservar_B
	def_procdir
	#Definir directorio de logs para los comandos
	def_logdir
	#Definir extension del archivo de log
	def_logext
	#Definir el tamaño maximo para los archivos de log
	def_logsize
}

#Crea los directorios
crear_dir(){
	log "I" "Creando estructuras de directorio...."
	echo ""	
	mkdir -p $BINDIR ; log "I" "$BINDIR"
	mkdir -p $MAEDIR ; log "I" "$MAEDIR"
	mkdir -p $ARRIDIR ; log "I" "$ARRIDIR"
	mkdir -p $RECHDIR ; log "I" "$RECHDIR"
	mkdir -p $ACEPDIR ; log "I" "$ACEPDIR"
	mkdir -p $REPODIR ; log "I" "$REPODIR"
	mkdir -p $PROCDIR ; log "I" "$PROCDIR"
	mkdir -p $LOGDIR ; log "I" "$LOGDIR"

}


#mover maestros a $MAEDIR
mov_mae(){
	find "${GRUPO}/archivos/" -type f -name "*.mae" -exec cp {} "${MAEDIR}" \;
	log "I" "Instalando archivos maestros en $MAEDIR"
}

#mover archivo de disponibilidades
mov_disp(){
	find "${GRUPO}/archivos/" -type f -name "*.dis" -exec cp {} "${PROCDIR}" \;
	log "I" "Instalando archidos de disponibildad en $PROCDIR"
}

# mover ejecutables a $BINDIR y dar permiso de ejecucion para el usuario
mov_eje(){

	find "${GRUPO}/ejecutables/" -type f -name "*" -exec cp {} "${BINDIR}" \;
	log "I" "Instalando programas y funciones en $BINDIR"
	chmod u+x ${BINDIR}/*
}

#actualiza el archivo de configuracion
act_conf(){

	user=`whoami`
	date=`date +"%Y-%m-%d %T"`

	if [ -e "$rutaInst" ] 
	then
		rm $rutaInst
	fi
	
	touch "$rutaInst"
	echo ""
	log "I" "Actualizando la configuración del sistema"
	linea="GRUPO=${GRUPO}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="CONFDIR=${CONFDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="BINDIR=${BINDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst	
	linea="MAEDIR=${MAEDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="ARRIDIR=${ARRIDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="ACEPDIR=${ACEPDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="RECHDIR=${RECHDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="REPODIR=${REPODIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="PROCDIR=${PROCDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="LOGDIR=${LOGDIR}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="LOGEXT=${LOGEXT}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="LOGSIZE=${LOGSIZE}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea="DATASIZE=${DATASIZE}=${user}=${date}" ; echo "$linea" >> $rutaInst
	linea=""	
	
	echo "Instalación CONLCUIDA"
}

#confirma inicio de la instalacion
conf_ins(){
	
	opcion="r"
	while [ $opcion != 's' -a $opcion != 'S' -a $opcion != 'n' -a $opcion != 'N'  ]
	do	
		log "I" "-L" "Iniciando la instalación, esta Ud seguro? (S/N) "
		read -n 1 -p "Iniciando la instalación, esta Ud seguro? (S/N) " opcion
		echo ""
		if [ $opcion == "" ] 
		then
			opcion="r"
		fi
	done
	if [ $opcion == "s" -o $opcion == "S" ] 
	then
		#Crea lo directorios		
		crear_dir
		#Mueve los archivos maestros
		mov_mae
		#Mueve el archivo de disponibilidad
		mov_disp
		#Mueve los archivos ejecutables
		mov_eje
		#actualiza el archivo de configuracion
		act_conf
		
	fi		
}

#Instala el paquete
instalar(){
	clear
	echo $cabecera		
	#Chequea si Perl esta instalado	
	chec_perl
	if [ $opcion = 's' -o $opcion = 'S' ]
	then
		#Setear parametros de instalacion
		set_parm
		#confirma los parametros de instalacion
		conf_parm
		#confirma la instalacion
		conf_ins
	fi
}

######################
# Programa Principal #
######################

#Inicia la instalacion
ini_inst

#Se realiza la instalacion
if [ $opcion = 's' -o $opcion = 'S' ]
then
	#Parametros de instalacion
	parm_inst
	
	if [ -e "$rutaInst" ]
	then 
		#Reviso la instalacion
		car_var #Carga las variables de la ejecución previa
		rev_ins
		act_conf
		instal_lista "D"
	else #No estaba instalado
		#Acepta la instalacion		
		acept_inst
		if [ $opcion = 's' -o $opcion = 'S' ]
		then	
			#Instala el paquete
			instalar
		fi
	fi
fi

#Se cancela la instalacion
canc_inst
echo ''
